/**
 * Created with IntelliJ IDEA.
 * Description:
 * 队列的实现(单链表实现)
 * User: xwl
 */
public class MyQueue {
    // 内部类--节点
    class Node {
        // 值
        public int val;
        // 节点的下一个
        public Node next;
        // 构造方法
        public Node(int val) {
            this.val = val;
        }
    }
    // 定义一个节点指向头节点
    public Node head;
    // 定义一个节点指向尾节点
    public Node last;
    // 定义一个值记录队的长度
    int usedSize = 0;

    /**
     * 入队(尾进)
     * @param val:待插入的值
     */
    public void offer(int val) {
        // 用构造方法创建一个节点
        Node node = new Node(val);
        // 判断
        if (head == null) {
            head = node;
            last = node;
        }else {
            last.next = node;
            last = node;
        }
        usedSize++;
    }

    /**
     * 出队(头出)
     * @return
     */
    public int poll() {
        // 判断队是否为空
        if(empty()) {
            return -1;
        }
        // 定义一个ret存储头节点的元素
        int ret = head.val;
        // 出队
        head = head.next;
        usedSize--;
        // 返回
        return ret;
    }

    /**
     * 查看队头的值
     * @return head.val:队头的值
     */
    public int peek() {
        // 判断队是否为空
        if(empty()) {
            return -1;
        }
        // 返回
        return head.val;
    }

    /**
     * 判断队列是否为空
     * @return true:空 false:非空
     */
    public boolean empty() {
        return usedSize == 0;
    }
}
